package funcktion;

import db.Database;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;

public class Login extends JFrame {
    private JTextField usernameTextField;
    private JPasswordField passwordField;
    private JComboBox<String> roleComboBox;

    public Login() {
        initializeGUI();
    }

    private void initializeGUI() {
        setTitle("登录");
        setSize(300, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//当用户关闭窗口时，应用程序将被终止。
        setLocationRelativeTo(null);//方法可以在窗口创建后使用，以将窗口定位于屏幕中央。

        JPanel mainPanel = new JPanel();
        //GridLayout 布局管理器可以在容器中创建一个网格布局
        mainPanel.setLayout(new GridLayout(4, 2, 10, 10));//

        JLabel usernameLabel = new JLabel("Username:");
        JLabel passwordLabel = new JLabel("Password:");
        JLabel roleLabel = new JLabel("Role:");
        usernameTextField = new JTextField();
        passwordField = new JPasswordField();
        roleComboBox = new JComboBox<>(new String[]{"reader", "operator", "admin"});
        JButton loginButton = new JButton("Login");

        loginButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {   //按钮功能
                int username = Integer.parseInt(usernameTextField.getText()) ;
                String password = new String(passwordField.getPassword());
                String role = (String) roleComboBox.getSelectedItem();

                validateLogin(username, password, role);
            }
        });

        mainPanel.add(usernameLabel);
        mainPanel.add(usernameTextField);
        mainPanel.add(passwordLabel);
        mainPanel.add(passwordField);
        mainPanel.add(roleLabel);
        mainPanel.add(roleComboBox);
        mainPanel.add(new JLabel());
        mainPanel.add(loginButton);

        add(mainPanel);
        setVisible(true);
    }

    private void validateLogin(int username, String password, String role) {

        // 连接数据库并执行查询
        try {
            Database con = new Database();
            con.DB();
            String query = "SELECT * FROM Manager WHERE name = ?";
            PreparedStatement statement = con.conn.prepareStatement(query);
            statement.setInt(1, username);//检索username
            ResultSet resultSet = statement.executeQuery();
//            System.out.println(resultSet.next());  //加了进不去

            // 检查结果集是否有匹配的记录
            if (resultSet.next()) {
                String storedPassword = resultSet.getString("password");
                String roleData = resultSet.getString("role");

                // 比较密码
                if (storedPassword.equals(password)) {
                    // 登录成功，根据角色执行相应操作
                    if (role.equals("admin") && role.equals(roleData)) {
                        System.out.println("管理员登录成功");
                        setVisible(false);
                        HomePageGUI frame = new HomePageGUI(roleData,username);
                        frame.setVisible(true);


                        // 执行管理员相关操作
                    } else if (role.equals("operator") && role.equals(roleData) ) {
                        System.out.println("操作员登录成功");
                        setVisible(false);
                        HomePageGUI frame = new HomePageGUI(roleData,username);
                        frame.setVisible(true);


                        // 执行操作员相关操作
                    } else if (role.equals("reader") && role.equals(roleData) ) {
                        System.out.println("登录成功");
                        setVisible(false);
                        HomePageGUI frame = new HomePageGUI(roleData,username);
                        frame.setVisible(true);

                        // 执行操作员相关操作
                    } else {
                        JOptionPane.showMessageDialog(Login.this, "角色错误", "Login Failed", JOptionPane.ERROR_MESSAGE);
                        System.out.println("角色错误");
                    }
                } else {
                    JOptionPane.showMessageDialog(Login.this, "密码不正确", "Login Failed", JOptionPane.ERROR_MESSAGE);
                    System.out.println("密码不正确");
                }
            } else {
                JOptionPane.showMessageDialog(Login.this, "用户名不存在", "Login Failed", JOptionPane.ERROR_MESSAGE);
            }
            resultSet.close();
            statement.close();
            con.conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        // 关闭连接和语句

        // 在这里根据具体的验证逻辑判断登录是否成功
        // 可以使用数据库查询或硬编码的方式进行验证
        // 这里只提供一个简单的示例
    }

    private void openReaderPage(String username) {
        // 在这里打开读者功能页面，根据需要进行开发
        // 可以是一个新的GUI页面或其他交互界面
        JOptionPane.showMessageDialog(Login.this, "Welcome, Reader: " + username, "Reader Page", JOptionPane.INFORMATION_MESSAGE);
    }

    private void openOperatorPage(String username) {
        // 在这里打开操作员功能页面，根据需要进行开发
        // 可以是一个新的GUI页面或其他交互界面
        JOptionPane.showMessageDialog(Login.this, "Welcome, Operator: " + username, "Operator Page", JOptionPane.INFORMATION_MESSAGE);
    }
    private void openAdminPage(String username) {
        // 在这里打开管理员功能页面，根据需要进行开发
        // 可以是一个新的GUI页面或其他交互界面
        JOptionPane.showMessageDialog(Login.this, "Welcome, Admin: " + username, "Admin Page", JOptionPane.INFORMATION_MESSAGE);
    }
}